7 resultados para Programación dinámica

em Universidad Politécnica de Madrid


Relevância:

60.00% 60.00%

Publicador:

Resumo:

El estilo de conducción influye significativamente en el consumo de combustible de un vehículo. En este trabajo se presenta un algoritmo que permite calcular en tiempo real el perfil de velocidades necesario para cubrir un recorrido en un tiempo determinado a la vez que optimiza el consumo de combustible. El algoritmo se basa en la Programación Dinámica y tiene en cuenta la orografía del terreno, las características del sistema propulsor del vehículo y las retenciones de tráfico para informar al conductor el perfil de velocidad que debe mantener para reducir el consumo de combustible y cumplir con el objetivo de tiempo de viaje. El algoritmo evalúa periódicamente si el conductor ha seguido las indicaciones del sistema y analiza los posibles adelantos y retrasos ocurridos durante el viaje para adaptar las recomendaciones de velocidad de los tramos siguientes de recorrido. Esta supervisión continua resulta especialmente útil en caso de encontrarse el vehículo con retenciones que le obliguen a reducir la velocidad por debajo de la recomendada, de forma que el algoritmo recalcule un nuevo perfil de velocidades en cuanto desaparezca la retención manteniendo el criterio de optimizar consumo y respetando el tiempo de llegada al destino. El algoritmo se ha probado en recorridos reales logrando ahorros de combustible significativos. También garantiza el llegar a destino según el horario marcado siempre que sea posible, respetando los límites de velocidad de la carretera.

Relevância:

60.00% 60.00%

Publicador:

Resumo:

En el proceso de cálculo de redes de tuberías se maneja un conjunto de variables con unas características muy peculiares, ya que son discretas y estandarizadas. Por lo tanto su evolución se produce por escalones (la presión nominal, el diámetro y el costo de los tubos). Por otro lado la presión de diseño de la red es una función directa de la presión de cabecera. En el proceso de optimización mediante programación dinámica la presión de cabecera se va reduciendo gradualmente en cada secuencia del proceso, haciendo que evolucione a la par la presión de diseño, lo que genera a su vez saltos discriminados en la presión nominal de los tramos, y con ello en su costo y en su gradiente de cambio. En esta tesis doctoral se analiza si estos cambios discriminados que se producen en el gradiente de cambio de algunos tramos en el curso de una secuencia, ocasionados por la evolución de la presión de cabecera de la red, generan interferencias que alteran el proceso secuencial de la programación dinámica. La modificación del gradiente de cambio durante el transcurso de una secuencia se conoce con el nombre de mutación, la cual puede ser activa cuando involucra a un tramo optimo modificando las condiciones de la transacción o pasiva si no crea afección alguna. En el análisis realizado se distingue entre la mutación del gradiente de cambio de los tramos óptimos (que puede generarse exclusivamente en el conjunto de los trayectos que los albergan), y entre los efectos que el cambio de timbraje produce en el resto de los tramos de la red (incluso los situados aguas abajo de los nudos con holgura de presión nula) sobre el mecanismo iterativo, estudiando la compatibilidad de este fenómeno con el principio de óptimo de Bellman. En el proceso de investigación llevado a cabo se destaca la fortaleza que da al proceso secuencial del método Granados el hecho de que el gradiente de cambio siempre sea creciente en el avance hacia el óptimo, es decir que el costo marginal de la reducción de las pérdidas de carga de la red que se consigue en una iteración siempre sea más caro que el de la iteración precedente. Asimismo, en el estudio realizado se revisan los condicionantes impuestos al proceso de optimización, incluyendo algunos que hasta ahora no se han tenido en cuenta en los estudios de investigación, pero que están totalmente integrados en la ingeniería práctica, como es la disposición telescópica de las redes (reordenación de los diámetros de mayor a menor de cabeza a cola de la red), y la disposición de un único diámetro por tramo, en lugar de que estén compartidos por dos diámetros contiguos (con sus salvedades en caso de tramos de gran longitud, o en otras situaciones muy específicas). Finalmente se incluye un capítulo con las conclusiones, aportaciones y recomendaciones, las cuales se consideran de gran utilidad para la ingeniería práctica, entre las que se destaca la perfección del método secuencial, la escasa transcendencia de las mutaciones del gradiente de cambio y la forma en que pueden obviarse, la inocuidad de las mutaciones pasivas y el cumplimiento del principio de Bellman en todo el proceso de optimización. The sizing process of a water distribution network is based on several variables, being some of them special, as they are discrete and their values are standardized: pipe pressure rating, pipe diameter and pipe cost. On another note, the sizing process is directly related with the pressure at the network head. Given that during the optimization by means of the Granados’ Method (based on dynamic programming) the pressure at the network head is being gradually reduced, a jump from one pipe pressure rating to another may arise during the sequential process, leading to changes on the pipe cost and on the gradient change (unitary cost for reducing the head losses). This chain of changes may, in turn, affect the sequential process diverting it from an optimal policies path. This thesis analyses how the abovementioned alterations could influence the results of the dynamic programming algorithm, that is to say the compatibility with the Bellman’s Principle of Optimality, which states that the sequence has to follow a route of optimal policies, and that past decisions should not influence the remaining ones. The modification of the gradient change is known as mutation. Mutations are active when they affect the optimal link (the one which was selected to be changed during iteration) or passive when they do not alter the selection of the optimal link. The thesis analysed the potential mutations processes along the network, both on the optimal paths and also on the rest of the network, and its influence on the final results. Moreover, the investigation analysed the practical restrictions of the sizing process that are fully integrated in the applied engineering, but not always taken into account by the optimization tools. As the telescopic distribution of the diameters (i.e. larger diameters are placed at the network head) and the use of a unique diameter per link (with the exception of very large links, where two consecutive diameters may be placed). Conclusions regarding robustness of the dynamic programming algorithm are given. The sequence of the Granados Method is quite robust and it has been shown capable to auto-correct the mutations that could arise during the optimization process, and to achieve an optimal distribution even when the Bellman’s Principle of Optimality is not fully accomplished. The fact that the gradient change is always increasing during the optimization (that is to say, the marginal cost of reducing head losses is always increasing), provides robustness to the algorithm, as looping are avoided in the optimization sequence. Additionally, insight into the causes of the mutation process is provided and practical rules to avoid it are given, improving the current definition and utilization of the Granados’ Method.

Relevância:

60.00% 60.00%

Publicador:

Resumo:

El consumo de combustible en un automóvil es una característica que se intenta mejorar continuamente debido a los precios del carburante y a la creciente conciencia medioambiental. Esta tesis doctoral plantea un algoritmo de optimización del consumo que tiene en cuenta las especificaciones técnicas del vehículo, el perfil de orografía de la carretera y el tráfico presente en ella. El algoritmo de optimización calcula el perfil de velocidad óptima que debe seguir el vehículo para completar un recorrido empleando un tiempo de viaje especificado. El cálculo del perfil de velocidad óptima considera los valores de pendiente de la carretera así como también las condiciones de tráfico vehicular de la franja horaria en que se realiza el recorrido. El algoritmo de optimización reacciona ante condiciones de tráfico cambiantes y adapta continuamente el perfil óptimo de velocidad para que el vehículo llegue al destino cumpliendo el horario de llegada establecido. La optimización de consumo es aplicada en vehículos convencionales de motor de combustión interna y en vehículos híbridos tipo serie. Los datos de consumo utilizados por el algoritmo de optimización se obtienen mediante la simulación de modelos cuasi-estáticos de los vehículos. La técnica de minimización empleada por el algoritmo es la Programación Dinámica. El algoritmo divide la optimización del consumo en dos partes claramente diferenciadas y aplica la Programación Dinámica sobre cada una de ellas. La primera parte corresponde a la optimización del consumo del vehículo en función de las condiciones de tráfico. Esta optimización calcula un perfil de velocidad promedio que evita, cuando es posible, las retenciones de tráfico. El tiempo de viaje perdido durante una retención de tráfico debe recuperarse a través de un aumento posterior de la velocidad promedio que incrementaría el consumo del vehículo. La segunda parte de la optimización es la encargada del cálculo de la velocidad óptima en función de la orografía y del tiempo de viaje disponible. Dado que el consumo de combustible del vehículo se incrementa cuando disminuye el tiempo disponible para finalizar un recorrido, esta optimización utiliza factores de ponderación para modular la influencia que tiene cada una de estas dos variables en el proceso de minimización. Aunque los factores de ponderación y la orografía de la carretera condicionan el nivel de ahorro de la optimización, los perfiles de velocidad óptima calculados logran ahorros de consumo respecto de un perfil de velocidad constante que obtiene el mismo tiempo de recorrido. Las simulaciones indican que el ahorro de combustible del vehículo convencional puede lograr hasta un 8.9% mientras que el ahorro de energía eléctrica del vehículo híbrido serie un 2.8%. El algoritmo fusiona la optimización en función de las condiciones del tráfico y la optimización en función de la orografía durante el cálculo en tiempo real del perfil óptimo de velocidad. La optimización conjunta se logra cuando el perfil de velocidad promedio resultante de la optimización en función de las condiciones de tráfico define los valores de los factores de ponderación de la optimización en función de la orografía. Aunque el nivel de ahorro de la optimización conjunta depende de las condiciones de tráfico, de la orografía, del tiempo de recorrido y de las características propias del vehículo, las simulaciones indican ahorros de consumo superiores al 6% en ambas clases de vehículo respecto a optimizaciones que no logran evitar retenciones de tráfico en la carretera. ABSTRACT Fuel consumption of cars is a feature that is continuously being improved due to the fuel price and an increasing environmental awareness. This doctoral dissertation describes an optimization algorithm to decrease the fuel consumption taking into account the technical specifications of the vehicle, the terrain profile of the road and the traffic conditions of the trip. The algorithm calculates the optimal speed profile that completes a trip having a specified travel time. This calculation considers the road slope and the expected traffic conditions during the trip. The optimization algorithm is also able to react to changing traffic conditions and tunes the optimal speed profile to reach the destination within the specified arrival time. The optimization is applied on a conventional vehicle and also on a Series Hybrid Electric vehicle (SHEV). The fuel consumption optimization algorithm uses data obtained from quasi-static simulations. The algorithm is based on Dynamic Programming and divides the fuel consumption optimization problem into two parts. The first part of the optimization process reduces the fuel consumption according to foreseeable traffic conditions. It calculates an average speed profile that tries to avoid, if possible, the traffic jams on the road. Traffic jams that delay drivers result in higher vehicle speed to make up for lost time. A higher speed of the vehicle within an already defined time scheme increases fuel consumption. The second part of the optimization process is in charge of calculating the optimal speed profile according to the road slope and the remaining travel time. The optimization tunes the fuel consumption and travel time relevancies by using two penalty factors. Although the optimization results depend on the road slope and the travel time, the optimal speed profile produces improvements of 8.9% on the fuel consumption of the conventional car and of 2.8% on the spent energy of the hybrid vehicle when compared with a constant speed profile. The two parts of the optimization process are combined during the Real-Time execution of the algorithm. The average speed profile calculated by the optimization according to the traffic conditions provides values for the two penalty factors utilized by the second part of the optimization process. Although the savings depend on the road slope, traffic conditions, vehicle features, and the remaining travel time, simulations show that this joint optimization process can improve the energy consumption of the two vehicles types by more than 6%.

Relevância:

30.00% 30.00%

Publicador:

Resumo:

Las pruebas de software (Testing) son en la actualidad la técnica más utilizada para la validación y la evaluación de la calidad de un programa. El testing está integrado en todas las metodologías prácticas de desarrollo de software y juega un papel crucial en el éxito de cualquier proyecto de software. Desde las unidades de código más pequeñas a los componentes más complejos, su integración en un sistema de software y su despliegue a producción, todas las piezas de un producto de software deben ser probadas a fondo antes de que el producto de software pueda ser liberado a un entorno de producción. La mayor limitación del testing de software es que continúa siendo un conjunto de tareas manuales, representando una buena parte del coste total de desarrollo. En este escenario, la automatización resulta fundamental para aliviar estos altos costes. La generación automática de casos de pruebas (TCG, del inglés test case generation) es el proceso de generar automáticamente casos de prueba que logren un alto recubrimiento del programa. Entre la gran variedad de enfoques hacia la TCG, esta tesis se centra en un enfoque estructural de caja blanca, y más concretamente en una de las técnicas más utilizadas actualmente, la ejecución simbólica. En ejecución simbólica, el programa bajo pruebas es ejecutado con expresiones simbólicas como argumentos de entrada en lugar de valores concretos. Esta tesis se basa en un marco general para la generación automática de casos de prueba dirigido a programas imperativos orientados a objetos (Java, por ejemplo) y basado en programación lógica con restricciones (CLP, del inglés constraint logic programming). En este marco general, el programa imperativo bajo pruebas es primeramente traducido a un programa CLP equivalente, y luego dicho programa CLP es ejecutado simbólicamente utilizando los mecanismos de evaluación estándar de CLP, extendidos con operaciones especiales para el tratamiento de estructuras de datos dinámicas. Mejorar la escalabilidad y la eficiencia de la ejecución simbólica constituye un reto muy importante. Es bien sabido que la ejecución simbólica resulta impracticable debido al gran número de caminos de ejecución que deben ser explorados y a tamaño de las restricciones que se deben manipular. Además, la generación de casos de prueba mediante ejecución simbólica tiende a producir un número innecesariamente grande de casos de prueba cuando es aplicada a programas de tamaño medio o grande. Las contribuciones de esta tesis pueden ser resumidas como sigue. (1) Se desarrolla un enfoque composicional basado en CLP para la generación de casos de prueba, el cual busca aliviar el problema de la explosión de caminos interprocedimiento analizando de forma separada cada componente (p.ej. método) del programa bajo pruebas, almacenando los resultados y reutilizándolos incrementalmente hasta obtener resultados para el programa completo. También se ha desarrollado un enfoque composicional basado en especialización de programas (evaluación parcial) para la herramienta de ejecución simbólica Symbolic PathFinder (SPF). (2) Se propone una metodología para usar información del consumo de recursos del programa bajo pruebas para guiar la ejecución simbólica hacia aquellas partes del programa que satisfacen una determinada política de recursos, evitando la exploración de aquellas partes del programa que violan dicha política. (3) Se propone una metodología genérica para guiar la ejecución simbólica hacia las partes más interesantes del programa, la cual utiliza abstracciones como generadores de trazas para guiar la ejecución de acuerdo a criterios de selección estructurales. (4) Se propone un nuevo resolutor de restricciones, el cual maneja eficientemente restricciones sobre el uso de la memoria dinámica global (heap) durante ejecución simbólica, el cual mejora considerablemente el rendimiento de la técnica estándar utilizada para este propósito, la \lazy initialization". (5) Todas las técnicas propuestas han sido implementadas en el sistema PET (el enfoque composicional ha sido también implementado en la herramienta SPF). Mediante evaluación experimental se ha confirmado que todas ellas mejoran considerablemente la escalabilidad y eficiencia de la ejecución simbólica y la generación de casos de prueba. ABSTRACT Testing is nowadays the most used technique to validate software and assess its quality. It is integrated into all practical software development methodologies and plays a crucial role towards the success of any software project. From the smallest units of code to the most complex components and their integration into a software system and later deployment; all pieces of a software product must be tested thoroughly before a software product can be released. The main limitation of software testing is that it remains a mostly manual task, representing a large fraction of the total development cost. In this scenario, test automation is paramount to alleviate such high costs. Test case generation (TCG) is the process of automatically generating test inputs that achieve high coverage of the system under test. Among a wide variety of approaches to TCG, this thesis focuses on structural (white-box) TCG, where one of the most successful enabling techniques is symbolic execution. In symbolic execution, the program under test is executed with its input arguments being symbolic expressions rather than concrete values. This thesis relies on a previously developed constraint-based TCG framework for imperative object-oriented programs (e.g., Java), in which the imperative program under test is first translated into an equivalent constraint logic program, and then such translated program is symbolically executed by relying on standard evaluation mechanisms of Constraint Logic Programming (CLP), extended with special treatment for dynamically allocated data structures. Improving the scalability and efficiency of symbolic execution constitutes a major challenge. It is well known that symbolic execution quickly becomes impractical due to the large number of paths that must be explored and the size of the constraints that must be handled. Moreover, symbolic execution-based TCG tends to produce an unnecessarily large number of test cases when applied to medium or large programs. The contributions of this dissertation can be summarized as follows. (1) A compositional approach to CLP-based TCG is developed which overcomes the inter-procedural path explosion by separately analyzing each component (method) in a program under test, stowing the results as method summaries and incrementally reusing them to obtain whole-program results. A similar compositional strategy that relies on program specialization is also developed for the state-of-the-art symbolic execution tool Symbolic PathFinder (SPF). (2) Resource-driven TCG is proposed as a methodology to use resource consumption information to drive symbolic execution towards those parts of the program under test that comply with a user-provided resource policy, avoiding the exploration of those parts of the program that violate such policy. (3) A generic methodology to guide symbolic execution towards the most interesting parts of a program is proposed, which uses abstractions as oracles to steer symbolic execution through those parts of the program under test that interest the programmer/tester most. (4) A new heap-constraint solver is proposed, which efficiently handles heap-related constraints and aliasing of references during symbolic execution and greatly outperforms the state-of-the-art standard technique known as lazy initialization. (5) All techniques above have been implemented in the PET system (and some of them in the SPF tool). Experimental evaluation has confirmed that they considerably help towards a more scalable and efficient symbolic execution and TCG.

Relevância:

30.00% 30.00%

Publicador:

Resumo:

Los lenguajes de programación son el idioma que los programadores usamos para comunicar a los computadores qué queremos que hagan. Desde el lenguaje ensamblador, que traduce una a una las instrucciones que interpreta un computador hasta lenguajes de alto nivel, se ha buscado desarrollar lenguajes más cercanos a la forma de pensar y expresarse de los humanos. Los lenguajes de programación lógicos como Prolog utilizan a su vez el lenguaje de la lógica de 1er orden de modo que el programador puede expresar las premisas del problema que se quiere resolver sin preocuparse del cómo se va a resolver dicho problema. La resolución del problema se equipara a encontrar una deducción del objetivo a alcanzar a partir de las premisas y equivale a lo que entendemos por la ejecución de un programa. Ciao es una implementación de Prolog (http://www.ciao-lang.org) y utiliza el método de resolución SLD, que realiza el recorrido de los árboles de decisión en profundidad(depth-first) lo que puede derivar en la ejecución de una rama de busqueda infinita (en un bucle infinito) sin llegar a dar respuestas. Ciao, al ser un sistema modular, permite la utilización de extensiones para implementar estrategias de resolución alternativas como la tabulación (OLDT). La tabulación es un método alternativo que se basa en memorizar las llamadas realizadas y sus respuestas para no repetir llamadas y poder usar las respuestas sin recomputar las llamadas. Algunos programas que con SLD entran en un bucle infinito, gracias a la tabulación dán todas las respuestas y termina. El modulo tabling es una implementación de tabulación mediante el algoritmo CHAT. Esta implementación es una versión beta que no tiene implementado un manejador de memoria. Entendemos que la gestión de memoria en el módulo de tabling tiene gran importancia, dado que la resolución con tabulación permite reducir el tiempo de computación (al no repetir llamadas), aumentando los requerimientos de memoria (para guardar las llamadas y las respuestas). Por lo tanto, el objetivo de este trabajo es implementar un mecanismo de gestión de la memoria en Ciao con el módulo tabling cargado. Para ello se ha realizado la implementación de: Un mecanismo de captura de errores que: detecta cuando el computador se queda sin memoria y activa la reinicialización del sitema. Un procedimiento que ajusta los punteros del modulo de tabling que apuntan a la WAM tras un proceso de realojo de algunas de las áreas de memoria de la WAM. Un gestor de memoria del modulo de tabling que detecta c realizar una ampliación de las áreas de memoria del modulo de tabling, realiza la solicitud de más memoria y realiza el ajuste de los punteros. Para ayudar al lector no familiarizado con este tema, describimos los datos que Ciao y el módulo de tabling alojan en las áreas de memoria dinámicas que queremos gestionar. Los casos de pruebas desarrollados para evaluar la implementación del gestor de memoria, ponen de manifiesto que: Disponer de un gestor de memoria dinámica permite la ejecución de programas en un mayor número de casos. La política de gestión de memoria incide en la velocidad de ejecución de los programas. ---ABSTRACT---Programming languages are the language that programmers use in order to communicate to computers what we want them to do. Starting from the assembly language, which translates one by one the instructions to the computer, and arriving to highly complex languages, programmers have tried to develop programming languages that resemble more closely the way of thinking and communicating of human beings. Logical programming languages, such as Prolog, use the language of logic of the first order so that programmers can express the premise of the problem that they want to solve without having to solve the problem itself. The solution to the problem is equal to finding a deduction of the objective to reach starting from the premises and corresponds to what is usually meant as the execution of a program. Ciao is an implementation of Prolog (http://www.ciao-lang.org) and uses the method of resolution SLD that carries out the path of the decision trees in depth (depth-frist). This can cause the execution of an infinite searching branch (an infinite loop) without getting to an answer. Since Ciao is a modular system, it allows the use of extensions to implement alternative resolution strategies, such as tabulation (OLDT). Tabulation is an alternative method that is based on the memorization of executions and their answers, in order to avoid the repetition of executions and to be able to use the answers without reexecutions. Some programs that get into an infinite loop with SLD are able to give all the answers and to finish thanks to tabulation. The tabling package is an implementation of tabulation through the algorithm CHAT. This implementation is a beta version which does not present a memory handler. The management of memory in the tabling package is highly important, since the solution with tabulation allows to reduce the system time (because it does not repeat executions) and increases the memory requirements (in order to save executions and answers). Therefore, the objective of this work is to implement a memory management mechanism in Ciao with the tabling package loaded. To achieve this goal, the following implementation were made: An error detection system that reveals when the computer is left without memory and activate the reinizialitation of the system. A procedure that adjusts the pointers of the tabling package which points to the WAM after a process of realloc of some of the WAM memory stacks. A memory manager of the tabling package that detects when it is necessary to expand the memory stacks of the tabling package, requests more memory, and adjusts the pointers. In order to help the readers who are not familiar with this topic, we described the data which Ciao and the tabling package host in the dynamic memory stacks that we want to manage. The test cases developed to evaluate the implementation of the memory manager show that: A manager for the dynamic memory allows the execution of programs in a larger number of cases. Memory management policy influences the program execution speed.

Relevância:

30.00% 30.00%

Publicador:

Resumo:

En la simulación dinámica de tethers se usan "bead models" que discretizan el cable mediante "cuentas" distribuidas en toda su longitud y cuya evolución temporal se aborda numéricamente. Dependiendo de la precisión deseada, el número de partículas oscila, típicamente, entre 5 y 50. En ocasiones la simulación se extiende sobre tiempos largos (varios años). La complejidad de las interacciones del cable con el medio espacial exige optimizar, en tiempo y precisión, los propagadores que constituyen el núcleo central del proceso. El "método de perturbaciones especiales" objeto de este artículo conjuga sencillez de programación, rapidez y precisión, y permite propagar la órbita de cualquier partícula material. Describe la evolución de ciertos "elementos orbitales", constantes del problema "no perturbado}"que, en el "perturbado", evolucionan en la escala de tiempos impuesta por la perturbación. Puede usarse con cualquier tipo de órbita, está libre de singularidades asociadas a inclinación y/o excentricidad pequeñas, y el uso de parámetros de Euler le confiere robustez.

Relevância:

30.00% 30.00%

Publicador:

Resumo:

El siguiente proyecto versa sobre la programación en lenguaje java del algoritmo de humanización MIDI desarrollado por Jorge Grundman en su tesis La Humanización de la Interpretación Virtual: Tres ejemplos significativos de la obra de Chopin. Este algoritmo, denominado Zig-Zag tiene como finalidad lograr que una partitura interpretada por un ordenador tenga unas características similares a la lectura a primera vista de la misma por un pianista. Para ello, basa su funcionamiento en una aleatorización del tempo en base a una serie de parámetros, a una modificación de la dinámica acorde a la modificación de tempo y a una segunda aleatorización para cada figura de la partitura. Este algoritmo tiene un gran campo de aplicación como complemento a los diversos secuenciadores y editores de partituras que existen en la actualidad, proporcionando nuevas características a los mismos. La programación del algoritmo se ha llevado a cabo empleando el Java SDK (Standard Developement Kit) 7 y las herramientas que proporciona esta plataforma para el manejo y modificación de los mensajes MIDI. ABSTRACT. The next project is about the programming in Java language of the MIDI humanization algorithm developed by Jorge Grundman in his thesis La Humanización de la Interpretación Virtual: Tres ejemplos significativos de la obra de Chopin. This algorithm, called Zig-Zag aims to have similar characteristics in a score performed by a computer than in the sight reading by a pianist. To this end, it bases its process in a randomization of the tempo from several parameters, a modification of the dynamic according to the change of tempo and a second randomization for each figure in the score. This algorithm has a big scope of application as complement for the different sequencers and score editors that already exist, providing new features to them. The algorithm has been programmed using the Java SDK (Standard Development Kit) 7 and the tools that this platform provides to handle and modify MIDI messages.